#include<bits/stdc++.h>
using namespace std;

const int N=23;

vector<int> edges[N];
string s[N];
int visit[N];
char c;
int n;
int ans=0;

void dfs(int i,int w)
{
	if(visit[i]>2) return;
	ans=max(ans,w);
	int size=edges[i].size();
	for(int j=0;j<size;j+=2)
	{
		int t=edges[i][j];
		int w_=edges[i][j+1];
		visit[t]++;
		dfs(t,w+w_+s[t].length());
		visit[t]--;	
	}
}

int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s[i];
	}
	//constucts edges
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			char c0=s[j][0];
			int len1=s[i].length();
			int len2=s[j].length();
			int k1=s[i].length()-1;
			int w=0;
			while(k1>0&&len1-k1<len2)
			{
				int len=len1-k1;
				if(s[i][k1]==s[j][0])
				{
					if(s[i].substr(k1,len)==s[j].substr(0,len))
					{
						w=len;
						break; 
					}
				}
				--k1;
			}
			if(w>0)
			{
				edges[i].emplace_back(j);
				edges[i].emplace_back(-w);
			}
		}
	}

//	for(int i=0;i<n;i++)
//	{
//		cout<<i<<":";
//		for(auto u:edges[i])
//		{
//			cout<<u<<' ';
//		}
//		cout<<endl;
//	}

	cin>>c;
	for(int i=0;i<n;i++)
	{
		if(s[i][0]==c)
		{
			memset(visit,0,sizeof(visit));
			visit[i]=1;
			dfs(i,s[i].length());
		}
	}
	cout<<ans;
	return 0;
}
